package com.test;


/*
import java.util.ArrayList;
import java.util.List;

public class Example01{
    public static void main(String[] args) {
        //创建一个只保存Integer类型的List集合
        List intList=new ArrayList();
        intList.add(1);
        intList.add(2);
        //因为失误放了非字符串数据
        intList.add("3");
        //Exception in thread "main" java.lang.ClassCastException: class java.lang.String cannot be cast to class java.lang.Integer (java.lang.String and java.lang.Integer are in module java.base of loader 'bootstrap')
        //	at com.test.Example01.main(Example01.java:15)
        for(int i=0;i<intList.size();i++) {
            Integer num=(Integer)intList.get(i);
            System.out.println(num);
        }
    }
}

 */

/*
import java.util.ArrayList;
import java.util.List;

//定义一个只存放Integer类型的类
class IntList {
    private List intList = new ArrayList();

    //添加元素的方法
    public boolean add(Integer e) {
        return intList.add(e);
    }

    //获取元素的方法
    public Integer get(int index) {
        return (Integer) intList.get(index);
    }

    //获取元素个数的方法
    public int size() {
        return intList.size();
    }
}

public class Example01 {
    public static void main(String[] args) {
        //创建一个只保存字符串的Integer
        IntList intList = new IntList();
        intList.add(1);
        intList.add(2);
        //存放Integer类型之外的数据,将出现编译时异常
//        intList.add("E");
        for (int i = 0; i < intList.size(); i++) {
            Integer num = intList.get(i);
        }
    }
}

 */

/*
import java.util.ArrayList;
import java.util.List;

public class Example01 {
    public static void main(String[] args) {
        //创建一个只保存Integer类型的List集合
        List<Integer> intList=new ArrayList<Integer>();
        intList.add(1);
        intList.add(2);
        //下面代码编译异常
//        intList.add("3");
        for(int i=0;i<intList.size();i++) {
            Integer num=intList.get(i);
            System.out.println(num);
        }
    }
}


 */


/*
//定义泛型类Goods
class Goods<T> {
    //类型形参变量作用于属性的类型
    private T info;

    //类型形参变量作用于构造方法的参数类型
    public Goods(T info) {
        this.info = info;
    }

    //类型形参变量作用于方法的返回值类型
    public T getInfo() {
        return this.info;
    }

    //类型形参变量作用于方法的参数类型
    public void setInfo(T info) {
        this.info = info;
    }
}

public class Example01 {
    public static void main(String[] args) {
        //创建Goods对象
        Goods goods = new Goods<Integer>(666);
        System.out.println(goods.getInfo() + "..." + goods.getInfo().getClass());
        goods.setInfo("热卖商品");
        System.out.println(goods.getInfo() + "..." + goods.getInfo().getClass());
    }
}

 */

class Student{
    //静态泛型方法
    public static <T> void staticMethod(T t) {
        System.out.println(t+"..."+t.getClass());
    }
    //泛型方法
    public <T> void otherMethod(T t) {
        System.out.println(t+"..."+t.getClass());
    }
}

public class Example01 {
    public static void main(String[] args) {
        //使用形式一调用静态泛型方法
        Student.staticMethod("staticMethod");
        //使用形式二调用静态泛型方法
        Student.<String>staticMethod("staticMethod");

        Student stu =new Student();
        //使用形式一调用普通的泛型方法
        stu.otherMethod(666);
        //使用形式二调用普通的泛型方法
        stu.<Integer>otherMethod(666);
    }
}